#include "singleSocket.h"
#include "Aplicacion.h"
#include <string>
#include <iostream>
#include <unistd.h>
#include <getopt.h>
#include <cstdlib>

#define PUERTO_SERVER 9090
#define IP_SERVER "127.0.0.1"

int main(int argc, char *argv[]){
	std::string ip = IP_SERVER;
	short puerto = PUERTO_SERVER;

	static struct option long_options[] =
	{
		{"port", required_argument, NULL, 'p'},
		{"ip", required_argument, NULL, 'i'},
		{0,0,0,0}
	};
	int opt;
	int option_index = 0;
	while ((opt = getopt_long_only(argc, argv, "p:i:", long_options, &option_index)) != -1){
		if (opt == 'p'){
			if (optarg[0] == '-'){
				std::cout<< "Error: Faltan parámetros para -p/-port"<<std::endl;
				return -1;
			}
			puerto = atoi(optarg);
		} else if (opt == 'i'){
			if (optarg[0] == '-'){
				std::cout<< "Error: Faltan parámetros para -i/-ip"<<std::endl;
				return -1;
			}
			ip = optarg;
		} else if (opt == ':'){
			std::cout<<"Error: Opciones no reconocidas o falta de parámetros"<<std::endl;
			return -1;
		} else if (opt == '?'){
			std::cout<<"Error: Opciones no reconocidas o falta de parámetros"<<std::endl;
			return -1;
		}
	}

	singleSocket* socket = singleSocket::getInstance();
	if (socket->conectar(ip,puerto) == -1){
		singleSocket::eliminar();
		std::cout<<"Error: No se pudo conectar al servidor"<<std::endl;
		return 1;
	}

	Aplicacion app;
	app.correr();
	if (singleSocket::isInstance()){
		singleSocket::eliminar();
	}
	return 0;
}
